package com.promise.jokerdream.database.dao

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Update
import com.promise.jokerdream.database.entity.TaskConfigEntity

/**
 * 任务配置数据访问对象
 */
@Dao
interface TaskConfigDao {
    
    /**
     * 插入或更新任务配置
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertOrUpdate(config: TaskConfigEntity)
    
    /**
     * 批量插入或更新任务配置
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertOrUpdateAll(configs: List<TaskConfigEntity>)
    
    /**
     * 更新任务配置
     */
    @Update
    suspend fun update(config: TaskConfigEntity)
    
    /**
     * 根据任务组ID获取所有任务配置
     */
    @Query("SELECT * FROM task_config WHERE taskGroupId = :taskGroupId")
    suspend fun getByTaskGroupId(taskGroupId: Long): List<TaskConfigEntity>
    
    /**
     * 根据任务ID获取配置
     */
    @Query("SELECT * FROM task_config WHERE taskId = :taskId LIMIT 1")
    suspend fun getByTaskId(taskId: String): TaskConfigEntity?
    
    /**
     * 删除任务配置
     */
    @Delete
    suspend fun delete(config: TaskConfigEntity)
    
    /**
     * 根据任务组ID删除所有任务配置
     */
    @Query("DELETE FROM task_config WHERE taskGroupId = :taskGroupId")
    suspend fun deleteByTaskGroupId(taskGroupId: Long)
    
    /**
     * 根据任务ID删除配置
     */
    @Query("DELETE FROM task_config WHERE taskId = :taskId")
    suspend fun deleteByTaskId(taskId: String)
    
    /**
     * 根据任务组ID统计任务数量
     */
    @Query("SELECT COUNT(*) FROM task_config WHERE taskGroupId = :taskGroupId")
    suspend fun getTaskCountByGroupId(taskGroupId: Long): Int
}

